var Menu = new Ext.extend(Ext.Panel, {
	border : false,
	layout : 'fit',
	initComponent : function() {
		this.initGrid();
		this.items = [this.grid];
		Menu.superclass.initComponent.call(this);
	},
	addOrUpdate : function(isAdd) {
		var me = this;
		if (this.win) {
			this.win.close();
		}
		var parentid = '0', pname = '顶级菜单';
		var node = me.grid.getSelectionModel().getSelectedNode();
		var rec = {
			data : node != null ? node.attributes : {}
		};
		if (!isAdd) {
			if (!rec) {
				TopMy.alert('请选择要修改的记录！');
				return;
			}
		} else {
			if (rec.data.parentid && rec.data.leaf != true) {
				parentid = rec.data.menuid;
				pname = rec.data.menuname;
			} else if (rec.data.parentid) {
				parentid = rec.data.parentid;
				pname = rec.data.pname;
			}
		}
		this.form = new TopExt.FormPanel({
					border : false,
					autoScroll : true,
					padding : 5,
					defaults : {
						xtype : 'textfield',
						anchor : '100%'
					},
					labelWidth : 70,
					labelAlign : 'right',
					items : [{
								xtype : 'hidden',
								name : 'menuid'
							}, {
								xtype : 'hidden',
								name : 'parentid',
								value : parentid
							}, {
								name : 'pname',
								fieldLabel : '上级菜单',
								value : pname,
								readOnly : true
							}, {
								xtype : 'hidden',
								name : 'priority'
							}, {
								name : 'menuname',
								fieldLabel : '菜单名称',
								allowBlank : false
							}, {
								name : 'url',
								fieldLabel : '菜单链接'
							}, {
								name : 'ico',
								fieldLabel : '菜单图标'
							}, {
								xtype : 'radiogroup',
								name : 'isleaf',
								fieldLabel : '末级菜单',
								items : [{
											name : 'isleaf',
											boxLabel : '是',
											inputValue : '1'
										}, {
											name : 'isleaf',
											boxLabel : '否',
											inputValue : '0',
											checked : true
										}]
							}],
					listeners : {
						afterrender : function(t) {
							if (!isAdd) {
								t.getForm().loadRecord(rec);
							}
						}
					}
				});
		this.win = new TopExt.Window({
					title : isAdd ? '新增菜单信息' : '更新菜单信息',
					width : 380,
					autoHeight : true,
					modal : true,
					items : [this.form],
					buttons : [{
								text : '保存',
								iconCls : 'icon-save',
								handler : function() {
									var url = My
											.url('/system/permis/menu/add.do');
									if (!isAdd) {
										url = My
												.url('/system/permis/menu/update.do');
									}
									TopMy.submit(me.form, {
												url : url,
												successCallback : function() {
													me.win.close();
													me.grid.reload();
												}
											});
								}
							}, {
								text : '取消',
								iconCls : 'icon-cancel',
								handler : function() {
									me.win.close();
								}
							}]
				});
		this.win.show();
		return this.form;
	},
	initGrid : function() {
		var me = this;
		this.grid = new Ext.ux.tree.TreeGrid({
			width : 500,
			height : 300,
			enableDD : true,
			border : false,
			enableSort : false,
			enableHdMenu : false,
			loadMask : true,
			root : new Ext.tree.AsyncTreeNode({
						id : '0',
						text : '菜单列表'
					}),
			reload : function(menuid) {
				var node = this.getRootNode();
				this.getLoader().load(node);
			},
			tbar : [{
						text : '新增',
						iconCls : 'icon-add',
						handler : function() {
							me.addOrUpdate(true);
						}
					}, {
						text : '修改',
						iconCls : 'icon-update',
						handler : function() {
							me.addOrUpdate(false);
						}
					}, {
						text : '禁用',
						itemId : 'set_disabled',
						iconCls : 'icon-disabled',
						handler : function() {
							if (this.iconCls == 'icon-disabled') {
								me.setDisabled(true, this);
							} else {
								me.setDisabled(false, this);
							}
						}
					}, {
						text : '删除',
						iconCls : 'icon-delete',
						handler : function() {
							me.dele();
						}
					}],
			columns : [{
						header : '菜单名称',
						dataIndex : 'menuname',
						width : 300
					}, {
						header : '链接地址',
						dataIndex : 'url',
						width : 250
					}, {
						header : '是否禁用',
						dataIndex : 'disabled',
						width : 100,
						align : 'center',
						tpl : new Ext.XTemplate('{disabled:this.format}', {
									format : function(v) {
										if (v == '1') {
											return '<font color="red">禁用</font>';
										}
										return '<font color="green">启用</font>';
									}
								})
					}, {
						header : '末级菜单',
						dataIndex : 'leaf',
						width : 100,
						align : 'center',
						tpl : new Ext.XTemplate('{leaf:this.format}', {
							format : function(v) {
								if (v) {
									return '<img src="'
											+ My
													.url('/common/extjs/resources/images/default/tree/leaf.gif')
											+ '" />';
								}
								return '<img src="'
										+ My
												.url('/common/extjs/resources/images/default/tree/folder-open.gif')
										+ '" />';
							}
						})
					}],
			loader : new Ext.ux.tree.TreeGridLoader({
						nodeParameter : 'parentid',
						dataUrl : My.url('/system/permis/menu/getMenuList.do'),
						createNode : function(attr) {
							attr.id = attr.menuid;
							if (attr.ico) {
								attr.iconCls = '" style="background-image: url('
										+ My.url('/resources/images/menu/'
												+ attr.ico) + ');';
							}
							return Ext.ux.tree.TreeGridLoader.prototype.createNode
									.call(this, attr);
						}
					}),
			listeners : {
				click : function(node, e) {
					var sdbar = me.grid.getTopToolbar()
							.getComponent('set_disabled');
					var disabled = node.attributes.disabled;
					if (disabled == '1') {
						sdbar.setText('启用');
						sdbar.setIconClass('icon-enabled');
					} else {
						sdbar.setText('禁用');
						sdbar.setIconClass('icon-disabled');
					}
				},
				nodedrop : function(e) {
					var node = e.dropNode.parentNode;
					var menuids = [];
					node.eachChild(function(child) {
								menuids.push(child.attributes.id);
							});
					My.request({
								loadMask : false,
								url : My
										.url('/system/permis/menu/setReplace.do'),
								params : {
									menuids : menuids,
									parentid : node.attributes.id
								},
								success : function() {
									me.grid.reload();
								}
							});
				}
			}
		});
	},
	setDisabled : function(disabled, sbbar) {
		var me = this;
		var node = me.grid.getSelectionModel().getSelectedNode();
		var rec = undefined;
		if (node) {
			rec = {
				data : node.attributes
			};
		}
		if (disabled) {
			if (!rec) {
				My.alert('请选择要禁用的菜单信息！');
				return;
			}
			My.confirm('确定要禁用该菜单及其子菜单吗？', function(btn) {
						if (btn == 'no') {
							return;
						}
						My.request({
									url : My
											.url('/system/permis/menu/setDisabled.do'),
									params : {
										menuid : rec.data.menuid,
										disabled : '1'
									},
									successCallback : function() {
										sbbar.setText('启用');
										sbbar.setIconClass('icon-enabled');
										me.grid.reload(rec.data.parentid);
									}
								});
					});
		} else {
			if (!rec) {
				My.alert('请选择要启用的菜单信息！');
				return;
			}
			var pnode = me.grid.getNodeById(rec.data.parentid);
			if (pnode && pnode.attributes.disabled == '1') {
				My.alert('该菜单无法启用，因为它的上级菜单已被禁用！');
				return;
			}
			My.request({
						url : My.url('/system/permis/menu/setDisabled.do'),
						params : {
							menuid : rec.data.menuid,
							disabled : '0'
						},
						successCallback : function() {
							sbbar.setText('禁用');
							sbbar.setIconClass('icon-disabled');
							me.grid.reload(rec.data.parentid);
						}
					});
		}
	},
	dele : function() {
		var me = this;
		var node = me.grid.getSelectionModel().getSelectedNode();
		var rec = undefined;
		if (node) {
			rec = {
				data : node.attributes
			};
		}
		if (!rec) {
			My.alert('请选择要删除的菜单信息 ！');
			return;
		}
		if (node.hasChildNodes()) {
			My.alert('该菜单下有子菜单，请将子菜单删除或移走再删除该菜单 ！');
			return;
		}
		My.confirm('确定要删除该菜单吗？', function(btn) {
					if (btn == 'no') {
						return;
					}
					My.request({
								url : My.url('/system/permis/menu/delete.do'),
								params : {
									menuid : rec.data.menuid
								},
								successCallback : function() {
									me.grid.reload();
								}
							});
				});
	}
});

Ext.onReady(function() {
			new Ext.Viewport({
						layout : 'fit',
						items : [new Menu()]
					});
		});